\section{Modificación del Códigos}

\subsection{Modificación del Scheduler}

Modificacmos el scheduler para que la cola sea FIFO, en el arhivo \textit{/usr/src/kernel/clock.c}
Modificando la linea donde dice:
\begin{verbatim} 
#define MILLISEC  100  
\end{verbatim}
por 
\begin{verbatim} 
#define MILLISEC  0  
\end{verbatim}


\subsubsection{Testeo}
La hipótesis del testeo es que con el kernel modificado dado que tiene una cola FIFO
este debera terminar, para que el nuevo proceso sea atendido. 
Esperamos que sea como un sitema mono-tarea, por lo que deberiamos ver 
que los procesos son atendidos más rápidamente. (Pagando el precio de que en total todo demore más)
Para lo cual creamos 2 procesos uno que usa mucha e/s (mucha espera) y otro que es puro calculo.
Estos se puede ver em la carpeta \textit{/usr/test/sche} son \textit{calculo.c} y \textit{adisco.c}
Para medir usamos el comnado time.

Lanzamos los 2 procesos usando un archivo de ash, llamado test.sh:
\begin{verbatim} 
#!/usr/bin/ash
time adisco& time calculo&
\end{verbatim}


Se puede observar los siguientes resultados:



\begin{center}

  \begin{tabular}{c|ccc}
        &       & Cálculo & Disco \\ 
        \hline
        & user  & 4.00    & 34.00 \\ 
  FIFO  & sys   & 3.40    &  0.91 \\
        & real  & 0.00    & 24.80 \\

   \end{tabular}
    
  
  \begin{tabular}{c|ccc}
         &      & Cálculo & Disco \\      
          \hline
         & user & 20.00   & 38.00 \\ 
Original & sys  &  3.61   &   1.20 \\
         & real &  3.66   &  24.96 \\
  \end{tabular}
\end{center}

Vemos pequeñas variaciones en sucesivas corridas del programa, pero la tendencia es clara, la modificacón del kernel se ve claramente reflejada en las pruebas.


\subsection{ Administraci'on de Memoria}

Modificamos el MM para que sea bestfit. Para lo cual modificamos el archivo \textit{/usr/ser/mm/alloc.c} también agregamos un pequeño código que imprime los \textit{holes} disponibles y de esa manera poder ver los resultados de la modificación en el testeo.
Ya que es una lista enlazada, encontrar el \textit{mejor hole} no es más que seguir la lista hasta el final, y quedarnos 
con el que mejor encaje en lugar de con el primero, como lo hace la implementación original.


\subsubsection{testeo}

Para testear creamos 3 programas sensillos que piden memoria y se quedan iterando indefinidamente. Con la idea de generar las 
condiciones adecuadas para forzar a que el algoritmo decida y así verificar si efectivamente esta haciendo lo esperado.

Los tamaños en clikcs de los programas son los siguientes
\begin{center}
% use packages: array
\begin{tabular}{|c|r|}
\hline
nombre & tamaño en clicks \\
\hline
\textbf{a} & 16139  \\ 
\hline
\textbf{b} & 2077  \\ 
\hline
\textbf{c} &  546 \\
\hline
\end{tabular}
\end{center}

La idea del experimento es que quede un bloque de memoria contiguo así: 

\begin{center}
  \begin{tabular}{|c|c|c|c|c|}
    \hline
    \textbf{c} & \textbf{a} & \textbf{c} & \textbf{b} & \textbf{c}  \\
    \hline
    546 & 16139 & 546 & 2077 & 546  \\
    \hline
  \end{tabular}
\end{center}

para lograrlo ejecutamos simplemente \textbf{c, a, c, b, c.} (Todos en background).
Primero, para asegurarnos que entraran los 6 procesos, ejecuatamos  \textbf{c}
tantas veces como haga falta para ``llenar'' con procesos los huecos previos al que vamos a usar.

\begin{center}
  \begin{tabular}{|c|c|c|c|c|}
    \hline
    \hline
    \textbf{c} & X & \textbf{c} & X & \textbf{c} \\
  \hline
    546 & 16139 & 546 & 2077 & 546  \\
    \hline
    \hline
  \end{tabular}
\end{center}
De modo de ``crear'' 2 nuevos \textbf{holes} de tamaño 16139 y 2077.

Si ejecutamos \textbf{b} en el caso del algoritmo con \textit{first fit} deberia ``caer'' en el primer \textbf{hole}


El exprerimento funciona como lo espreramos.

Un detalle de implementacion: la función que imprime los holes refleja el resultado despues de que pedimos la memoria, esto es, 
para ver los cambios efectuados por el proceso x debemos ejecutar otro comando luego de este.
Una manera de ver el mapa de \textbf{holes} es pedir ls de cualquier directorio.

Los arhcivos de prueba estan en \textit{/usr/src/mm} en la imagen de minix y esta se encuentra en\textit{ /imagenes minix/ejercicio 10 mm}


